'use strict';

const { logger } = require('ee-core/log');
const fs = require('fs').promises;
const path = require('path');

/**
 * 系统设置服务
 * @class
 */
class SettingsService {

  constructor() {
    // 设置文件存储路径
    this.dataDir = path.join(__dirname, '../../data');
    this.settingsPath = path.join(this.dataDir, 'settings.json');
    this.ensureDataDir();
  }

  /**
   * 确保数据目录存在
   */
  async ensureDataDir() {
    try {
      await fs.access(this.dataDir);
    } catch (error) {
      await fs.mkdir(this.dataDir, { recursive: true });
      logger.info('创建数据目录:', this.dataDir);
    }
  }

  /**
   * 获取用户设置
   */
  async getSettings(userId = 'default') {
    try {
      await this.ensureDataDir();
      
      // 尝试读取设置文件
      const data = await fs.readFile(this.settingsPath, 'utf8');
      const allSettings = JSON.parse(data);
      
      // 返回指定用户的设置，如果不存在则返回默认设置
      return allSettings[userId] || this.getDefaultSettings();
    } catch (error) {
      logger.warn('读取设置文件失败，使用默认设置:', error.message);
      return this.getDefaultSettings();
    }
  }

  /**
   * 保存用户设置
   */
  async saveSettings(userId = 'default', settings) {
    try {
      await this.ensureDataDir();
      
      let allSettings = {};
      
      // 尝试读取现有设置
      try {
        const data = await fs.readFile(this.settingsPath, 'utf8');
        allSettings = JSON.parse(data);
      } catch (error) {
        logger.info('设置文件不存在，创建新文件');
      }
      
      // 更新用户设置
      allSettings[userId] = {
        ...this.getDefaultSettings(),
        ...settings,
        updatedAt: new Date().toISOString()
      };
      
      // 写入文件
      await fs.writeFile(this.settingsPath, JSON.stringify(allSettings, null, 2), 'utf8');
      
      logger.info(`用户 ${userId} 设置保存成功`);
      return { success: true, settings: allSettings[userId] };
    } catch (error) {
      logger.error('保存设置失败:', error);
      throw error;
    }
  }

  /**
   * 获取默认设置
   */
  getDefaultSettings() {
    return {
      // 基本设置
      displayMode: 'option1', // 显示模式：option1-浅色，option2-深色
      notifications: false,   // 通知提醒
      language: 'zh-CN',      // 默认语言
      fontSize: 14,           // 字体大小
      
      // 安全设置
      loginVerification: true, // 登录验证
      
      // 系统信息
      createdAt: new Date().toISOString(),
      updatedAt: new Date().toISOString()
    };
  }

  /**
   * 删除用户设置
   */
  async deleteSettings(userId) {
    try {
      const data = await fs.readFile(this.settingsPath, 'utf8');
      const allSettings = JSON.parse(data);
      
      if (allSettings[userId]) {
        delete allSettings[userId];
        await fs.writeFile(this.settingsPath, JSON.stringify(allSettings, null, 2), 'utf8');
        logger.info(`用户 ${userId} 设置删除成功`);
        return { success: true };
      }
      
      return { success: false, message: '用户设置不存在' };
    } catch (error) {
      logger.error('删除设置失败:', error);
      throw error;
    }
  }

  /**
   * 获取所有用户设置（管理员功能）
   */
  async getAllSettings() {
    try {
      const data = await fs.readFile(this.settingsPath, 'utf8');
      return JSON.parse(data);
    } catch (error) {
      logger.warn('读取所有设置失败:', error.message);
      return {};
    }
  }
}

SettingsService.toString = () => '[class SettingsService]';

module.exports = {
  SettingsService,
  settingsService: new SettingsService()
};
